热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

时调|都会_fragment和activity生命周期

篇首语:本文由编程笔记#小编为大家整理,主要介绍了fragment和activity生命周期相关的知识,希望对你有一定的参考价值。看到一篇fragment

篇首语:本文由编程笔记#小编为大家整理,主要介绍了fragment和activity生命周期相关的知识,希望对你有一定的参考价值。


看到一篇fragment与activity的文章,写的很详细很好,转载过来,给大家分享!

【声明】 

欢迎转载,但请保留文章原始出处→_→ 

生命壹号:http://www.cnblogs.com/smyhvae/ 

文章来源:http://www.cnblogs.com/smyhvae/p/3983234.html

联系方式:smyhvae@163.com 

 

【正文】

上一章节中(Android系列之Fragment(一)----Fragment加载到Activity当中),我们对Fragment的生命周期进行了简单介绍,这一章节将对生命周期和返回栈进行详细介绍。

一、Fragment的生命周期初探:

因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。

如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。

但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。

当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。

使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。

每当创建一个Fragment时,首先添加以下三个回调方法:


  • onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。
  • onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。

  • onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。

将Fragment加载到Activity当中有两种方式:


  • 方式一:添加Fragment到Activity的布局文件当中
  • 方式二:在Activity的代码中动态添加Fragment(荐)

第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。

第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。

 

二、Fragment的生命周期详解:

先来看一下官方文档的图片吧:

 

我们再把Activity的生命周期和Fragment的生命周期对比一下,就清楚很多了:

我们还是在实例中来看一下Fragment的生命周期吧。

【实例】在MainActivity中加载一个Fragment:(完整版代码如下)

我们所创建的Fragment的布局文件fragment01.xml的代码如下:






xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"
android:layout_width
&#61;"match_parent"
android:layout_height
&#61;"match_parent"
android:orientation
&#61;"vertical" >

<RatingBar
android:id&#61;"&#64;&#43;id/ratingBar1"
android:layout_width
&#61;"wrap_content"
android:layout_height
&#61;"wrap_content" />

<Button
android:id&#61;"&#64;&#43;id/button1"
android:layout_width
&#61;"wrap_content"
android:layout_height
&#61;"wrap_content"
android:text
&#61;"Button" />

LinearLayout>



MyFragment.java代码如下&#xff1a;&#xff08;注意生命周期中每个方法的作用&#xff09;






1 package com.example.m01_fragmentlifecycle;
2
3 import android.app.Activity;
4 import android.app.Fragment;
5 import android.os.Bundle;
6 import android.util.Log;
7 import android.view.LayoutInflater;
8 import android.view.View;
9 import android.view.ViewGroup;
10
11 public class MyFragment extends Fragment
12 private final String TAG &#61; "MyFragment";
13
14 //获得activity的传递的值
15 &#64;Override
16 public void onAttach(Activity activity)
17 // TODO Auto-generated method stub
18 super.onAttach(activity);
19 Log.i(TAG, "--MyFragment->>onAttach");
20
21
22 //实例化成员变量
23 &#64;Override
24 public void onCreate(Bundle savedInstanceState)
25 // TODO Auto-generated method stub
26 super.onCreate(savedInstanceState);
27 Log.i(TAG, "--MyFragment->>onCreate");
28
29
30 //给当前的fragment绘制UI布局&#xff0c;可以使用线程更新UI
31 &#64;Override
32 public View onCreateView(LayoutInflater inflater, ViewGroup container,
33 Bundle savedInstanceState)
34 Log.i(TAG, "--MyFragment->>onCreateView");
35 View view &#61; inflater.inflate(R.layout.fragment01, null);
36 // TODO Auto-generated method stub
37 return view;
38
39
40 //表示activity执行oncreate方法完成了的时候会调用此方法
41 &#64;Override
42 public void onActivityCreated(Bundle savedInstanceState)
43 // TODO Auto-generated method stub
44 super.onActivityCreated(savedInstanceState);
45 Log.i(TAG, "--MyFragment->>onActivityCreated");
46
47
48 //和activity一致
49 &#64;Override
50 public void onStart()
51 // TODO Auto-generated method stub
52 super.onStart();
53 Log.i(TAG, "--MyFragment->>onStart");
54
55
56 //和activity一致
57 &#64;Override
58 public void onResume()
59 // TODO Auto-generated method stub
60 super.onResume();
61 Log.i(TAG, "--MyFragment->>onResume");
62
63
64 //和activity一致
65 &#64;Override
66 public void onPause()
67 // TODO Auto-generated method stub
68 super.onPause();
69 Log.i(TAG, "--MyFragment->>onPause");
70
71
72 //和activity一致
73 &#64;Override
74 public void onStop()
75 // TODO Auto-generated method stub
76 super.onStop();
77 Log.i(TAG, "--MyFragment->>onStop");
78
79
80 //表示fragment销毁相关联的UI布局
81 &#64;Override
82 public void onDestroyView()
83 // TODO Auto-generated method stub
84 super.onDestroyView();
85 Log.i(TAG, "--MyFragment->>onDestroyView");
86
87
88 //销毁fragment对象
89 &#64;Override
90 public void onDestroy()
91 // TODO Auto-generated method stub
92 super.onDestroy();
93 Log.i(TAG, "--MyFragment->>onDestroy");
94
95
96 //脱离activity
97 &#64;Override
98 public void onDetach()
99 // TODO Auto-generated method stub
100 super.onDetach();
101 Log.i(TAG, "--MyFragment->>onDetach");
102
103



activity_main.xml的代码如下&#xff1a;






<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"
xmlns:tools
&#61;"http://schemas.android.com/tools"
android:layout_width
&#61;"match_parent"
android:layout_height
&#61;"match_parent"
android:orientation
&#61;"horizontal"
tools:context
&#61;".MainActivity" >
<LinearLayout
android:id&#61;"&#64;&#43;id/line"
android:layout_width
&#61;"wrap_content"
android:layout_height
&#61;"match_parent"
android:orientation
&#61;"vertical" >
LinearLayout>

LinearLayout>



MainActivity.java的代码如下&#xff1a;






1 package com.example.m01_fragmentlifecycle;
2
3 import android.os.Bundle;
4 import android.app.Activity;
5 import android.app.FragmentManager;
6 import android.app.FragmentTransaction;
7 import android.util.Log;
8 import android.view.Menu;
9
10 public class MainActivity extends Activity
11 private final String TAG &#61; "MainActivity";
12 private FragmentManager manager;
13 private FragmentTransaction transaction;
14
15 &#64;Override
16 protected void onCreate(Bundle savedInstanceState)
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.activity_main);
19 manager &#61; getFragmentManager();
20 transaction &#61; manager.beginTransaction();
21 MyFragment fragment &#61; new MyFragment();
22 transaction.add(R.id.line, fragment);
23 transaction.commit();
24 Log.i(TAG, "--MainActivity->>onCreate");
25
26
27 &#64;Override
28 protected void onStart()
29 // TODO Auto-generated method stub
30 super.onStart();
31 Log.i(TAG, "--MainActivity->>onStart");
32
33
34 &#64;Override
35 protected void onResume()
36 // TODO Auto-generated method stub
37 super.onResume();
38 Log.i(TAG, "--MainActivity->>onResume");
39
40
41 &#64;Override
42 protected void onPause()
43 // TODO Auto-generated method stub
44 super.onPause();
45 Log.i(TAG, "--MainActivity->>onPause");
46
47
48 &#64;Override
49 protected void onStop()
50 // TODO Auto-generated method stub
51 super.onStop();
52 Log.i(TAG, "--MainActivity->>onStop");
53
54
55 &#64;Override
56 protected void onRestart()
57 // TODO Auto-generated method stub
58 super.onRestart();
59 Log.i(TAG, "--MainActivity->>onRestart");
60
61 &#64;Override
62 protected void onDestroy()
63 // TODO Auto-generated method stub
64 super.onDestroy();
65 Log.i(TAG, "--MainActivity->>onDestroy");
66

推荐阅读
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
author-avatar
歪歪Doris
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有